import fieldTypes from '../../utils/field-types-desc';

const fieldType = fieldTypes.find(({ code }) => code === 'upload') || {};

export default {
    attributes: [
        {
            params: 'v-model',
            des: '绑定值',
            type: fieldType.valueType,
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'props',
            des: '表单元素配置; 详细配置请查看下方【props 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【props】',
                    configList: [
                        {
                            params: 'type',
                            des: `表单项控件的类型(此控件的 type 固定为 "${fieldType.code}")`,
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'value',
                            des: '表单项控件的默认值，若绑定值为空，将获取该值作为初始值',
                            type: fieldType.valueType,
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'disabled',
                            des: '是否禁用',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'size',
                            des: '上传按钮尺寸大小（listType 为 "text" 或 "picture" 时有效）',
                            type: 'String',
                            values: '"large" | "default" | "small"',
                            defaultVal: '"default"',
                        },
                        {
                            params: 'btnText',
                            des: '上传按钮文案（listType 为 "text" 或 "picture" 时有效）',
                            type: 'String',
                            values: '-',
                            defaultVal: '"点击上传"',
                        },
                        {
                            params: 'icon',
                            des: '上传按钮图标（listType 为 "text" 或 "picture" 时有效）',
                            type: 'String | Component',
                            values: '-',
                            defaultVal: '"Upload"',
                        },
                        {
                            params: 'showTips',
                            des: '是否展示上传提示文案',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'uploadTip',
                            des: '自定义上传提示文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"仅支持上传 {acceptName || accept}， 文件大小不能超过 {maxSize} M ，最多可上传 {limit} 个"',
                        },
                        {
                            params: 'accept',
                            des: '上传文件类型',
                            type: 'String',
                            values: 'image/png | image/jpeg | video/* ...',
                            defaultVal: '-',
                        },
                        {
                            params: 'acceptName',
                            des: '上传文件类型名称，用于上传提示文案内展示',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'maxSize',
                            des: '上传文件的大小限制（单位: M）',
                            type: 'Number',
                            values: '-',
                            defaultVal: '20',
                        },
                        {
                            params: 'limit',
                            des: '上传文件的个数限制',
                            type: 'Number',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'accept',
                            des: '上传文件类型',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'listType',
                            des: '文件列表的类型',
                            type: 'String',
                            values: '\'text\' | \'picture\' | \'picture-card\'',
                            defaultVal: '"text"',
                        },
                        {
                            params: 'action',
                            des: '请求 URL',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'headers',
                            des: '设置上传的请求头部',
                            type: 'Headers | Object',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'method',
                            des: '设置上传请求方法',
                            type: 'String',
                            values: '-',
                            defaultVal: '"post"',
                        },
                        {
                            params: 'multiple',
                            des: '是否支持多选文件',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'data',
                            des: '上传时附带的额外参数',
                            type: 'Object | String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'name',
                            des: '上传的文件字段名',
                            type: 'String',
                            values: '-',
                            defaultVal: '"file"',
                        },
                        {
                            params: 'withCredentials',
                            des: '支持发送 cookie 凭证信息',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'showFileList',
                            des: '是否显示已上传文件列表',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'drag',
                            des: '是否启用拖拽上传',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'autoUpload',
                            des: '是否自动上传文件',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'onPreview',
                            des: '点击文件列表中已上传的文件时的钩子',
                            type: 'Function(file)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'onRemove',
                            des: '文件列表移除文件时的钩子',
                            type: 'Function(file, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'onSuccess',
                            des: '文件上传成功时的钩子',
                            type: 'Function(response, file, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'onError',
                            des: '文件上传失败时的钩子',
                            type: 'Function(error, file, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'onProgress',
                            des: '文件上传时的钩子',
                            type: 'Function(event, file, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'onChange',
                            des: '文件状态改变时的钩子，添加文件、上传成功和上传失败时都会被调用',
                            type: 'Function(file, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'onExceed',
                            des: '当超出限制时，执行的钩子函数',
                            type: 'Function(files, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'beforeUpload',
                            des: '上传文件之前的钩子，参数为上传的文件， 若返回false或者返回 Promise 且被 reject，则停止上传',
                            type: 'Function(file)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'beforeRemove',
                            des: '删除文件之前的钩子，参数为上传的文件和文件列表， 若返回 false 或者返回 Promise 且被 reject，则停止删除',
                            type: 'Function(file, fileList)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'httpRequest',
                            des: '覆盖默认的 Xhr 行为，允许自行实现上传文件的请求',
                            type: 'Function(options)',
                            values: '(options: UploadRequestOptions) => XMLHttpRequest | Promise<unknown>',
                            defaultVal: '-',
                        },
                    ],
                },
            ],
        },
    ],
    events: [
        {
            name: 'change',
            des: '文件内容变化触发的事件',
            params: '({ value, label, data }, props)',
        },
    ],
    slots: [
        {
            name: 'upload',
            des: '自定义默认内容（触发上传动作的主体内容部分）',
            params: '-',
        },
        {
            name: 'file',
            des: '缩略图模板的内容',
            params: '{ file }',
        },
    ],
    refs: [
        {
            name: 'abort',
            des: '取消上传请求',
            params: 'file',
            return: '(file: UploadFile) => void',
        },
        {
            name: 'submit',
            des: '手动上传文件列表',
            params: 'file',
            return: '-',
        },
        {
            name: 'clearFiles',
            des: '清空已上传的文件列表（该方法不支持在 before-upload 中调用）',
            params: 'status',
            return: '(status?: Array<"ready" | "uploading" | "success" | "fail">) => void',
        },
        {
            name: 'handleRemove',
            des: '手动移除文件',
            params: 'file',
            return: '(file: UploadFile) => void',
        },
    ],
};
